home *** CD-ROM | disk | FTP | other *** search
/ Aminet 2 / Aminet AMIGA CDROM (1994)(Walnut Creek)[Feb 1994][W.O. 44790-1].iso / Aminet / util / gnu / groff_src.lha / Groff-1.07 / troff / token.h < prev    next >
C/C++ Source or Header  |  1992-08-03  |  5KB  |  198 lines

  1. // -*- C++ -*-
  2. /* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
  3.      Written by James Clark (jjc@jclark.com)
  4.  
  5. This file is part of groff.
  6.  
  7. groff is free software; you can redistribute it and/or modify it under
  8. the terms of the GNU General Public License as published by the Free
  9. Software Foundation; either version 2, or (at your option) any later
  10. version.
  11.  
  12. groff is distributed in the hope that it will be useful, but WITHOUT ANY
  13. WARRANTY; without even the implied warranty of MERCHANTABILITY or
  14. FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  15. for more details.
  16.  
  17. You should have received a copy of the GNU General Public License along
  18. with groff; see the file COPYING.  If not, write to the Free Software
  19. Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
  20.  
  21.  
  22. struct charinfo;
  23. struct node;
  24. struct vunits;
  25.  
  26. // See ARM p251.
  27. static void process_input_stack();
  28.  
  29. class token {
  30.   symbol nm;
  31.   node *nd;
  32.   unsigned char c;
  33.   int val;
  34.   units dim;
  35.   enum token_type {
  36.     TOKEN_BACKSPACE,
  37.     TOKEN_BEGIN_TRAP,
  38.     TOKEN_CHAR,            // a normal printing character
  39.     TOKEN_DUMMY,
  40.     TOKEN_EMPTY,        // this is the initial value
  41.     TOKEN_END_TRAP,
  42.     TOKEN_ESCAPE,        // \e
  43.     TOKEN_HYPHEN_INDICATOR,
  44.     TOKEN_INTERRUPT,        // \c
  45.     TOKEN_ITALIC_CORRECTION,    // \/
  46.     TOKEN_LEADER,        // ^A
  47.     TOKEN_LEFT_BRACE,
  48.     TOKEN_MARK_INPUT,        // \k -- `nm' is the name of the register
  49.     TOKEN_NEWLINE,        // newline
  50.     TOKEN_NODE,
  51.     TOKEN_NUMBERED_CHAR,
  52.     TOKEN_PAGE_EJECTOR,
  53.     TOKEN_REQUEST,
  54.     TOKEN_RIGHT_BRACE,
  55.     TOKEN_SPACE,        // ` ' -- ordinary space
  56.     TOKEN_SPECIAL,        // a special character -- \' \` \- \(xx
  57.     TOKEN_SPREAD,        // \p -- break and spread output line 
  58.     TOKEN_TAB,            // tab
  59.     TOKEN_TRANSPARENT,        // \!
  60.     TOKEN_EOF            // end of file
  61.     } type;
  62. public:
  63.   token();
  64.   ~token();
  65.   token(const token &);
  66.   void operator=(const token &);
  67.   void next();
  68.   void process();
  69.   void skip();
  70.   int eof();
  71.   int nspaces();        // 1 if space, 2 if double space, 0 otherwise
  72.   int space();            // is it a space or double space?
  73.   int white_space();        // is the current token space or tab?
  74.   int newline();        // is the current token a newline?
  75.   int tab();            // is the current token a tab?
  76.   int leader();
  77.   int backspace();
  78.   int delimiter(int warn = 0);    // is it suitable for use as a delimiter?
  79.   int dummy();
  80.   int transparent();
  81.   int left_brace();
  82.   int right_brace();
  83.   int page_ejector();
  84.   int hyphen_indicator();
  85.   int operator==(const token &); // need this for delimiters, and for conditions
  86.   int operator!=(const token &); // ditto
  87.   unsigned char ch();
  88.   charinfo *get_char(int required = 0);
  89.   int add_to_node_list(node **);
  90.   int title();
  91.   void make_space();
  92.   void make_newline();
  93.   const char *description();
  94.  
  95.   friend void process_input_stack();
  96. };
  97.  
  98. extern token tok;        // the current token
  99.  
  100. extern symbol get_name(int required = 0);
  101. extern symbol get_long_name(int required = 0);
  102. extern charinfo *get_optional_char();
  103. extern void skip_line();
  104. extern void handle_initial_title();
  105.  
  106. struct hunits;
  107. extern void read_title_parts(node **part, hunits *part_width);
  108.  
  109. extern int get_number(units *result, unsigned char si);
  110. extern int get_integer(int *result);
  111.  
  112. extern int get_number(units *result, unsigned char si, units prev_value);
  113. extern int get_integer(int *result, int prev_value);
  114.  
  115. void interpolate_number_reg(symbol, int);
  116.  
  117. const char *asciify(int c);
  118.  
  119. inline int token::newline()
  120.   return type == TOKEN_NEWLINE; 
  121. }
  122.  
  123. inline int token::space()
  124.   return type == TOKEN_SPACE;
  125. }
  126.  
  127. inline int token::nspaces()
  128. {
  129.   if (type == TOKEN_SPACE)
  130.     return 1;
  131.   else
  132.     return 0;
  133. }
  134.  
  135. inline int token::white_space()
  136. {
  137.   return type == TOKEN_SPACE || type == TOKEN_TAB;
  138. }
  139.  
  140. inline int token::transparent()
  141. {
  142.   return type == TOKEN_TRANSPARENT;
  143. }
  144.  
  145. inline int token::page_ejector()
  146. {
  147.   return type == TOKEN_PAGE_EJECTOR;
  148. }
  149.  
  150. inline unsigned char token::ch()
  151. {
  152.   return type == TOKEN_CHAR ? c : 0;
  153.  
  154. inline int token::eof()
  155. {
  156.   return type == TOKEN_EOF;
  157. }
  158.  
  159. inline int token::dummy()
  160. {
  161.   return type == TOKEN_DUMMY;
  162. }
  163.  
  164. inline int token::left_brace()
  165. {
  166.   return type == TOKEN_LEFT_BRACE;
  167. }
  168.  
  169. inline int token::right_brace()
  170. {
  171.   return type == TOKEN_RIGHT_BRACE;
  172. }
  173.  
  174. inline int token::tab()
  175. {
  176.   return type == TOKEN_TAB;
  177. }
  178.  
  179. inline int token::leader()
  180. {
  181.   return type == TOKEN_LEADER;
  182. }
  183.  
  184. inline int token::backspace()
  185. {
  186.   return type == TOKEN_BACKSPACE;
  187. }
  188.  
  189. inline int token::hyphen_indicator()
  190. {
  191.   return type == TOKEN_HYPHEN_INDICATOR;
  192. }
  193.  
  194. int has_arg();
  195.